#include <iostream>
#include <vector>
#include <span>
#include <spanstream>
#include <sstream>

int main() {
    // 假设这是从传感器接收到的温度数据（单位：摄氏度）
    std::vector<float> temperatureCelsius = {25.0f, 30.0f, 15.0f, 10.0f, 20.5f};

    // 使用 std::span 创建一个视图来指向 vector 数据
    std::span<float> inputSpan(temperatureCelsius);

    // 创建字符缓冲区，用于存储输入和输出的数据
    std::vector<char> inputBuffer;
    std::ostringstream tempStream;

    // 将输入数据转换为字符串并写入缓冲区
    for (float temp : inputSpan) {
        tempStream << temp << ' ';
    }
    std::string inputString = tempStream.str();
    inputBuffer.insert(inputBuffer.end(), inputString.begin(), inputString.end());

    // 创建输入流来直接从内存中读取数据
    std::span<char> inputCharSpan(inputBuffer);
    std::ispanstream inputStream(inputCharSpan);

    // 创建输出缓冲区，用于存储转换后的数据（单位：华氏度）
    std::vector<float> temperatureFahrenheit(temperatureCelsius.size());
    std::vector<char> outputBuffer(100); // 预留足够的空间来存放输出字符串
    std::span<char> outputCharSpan(outputBuffer);
    std::ospanstream outputStream(outputCharSpan);

    // 从输入流读取数据，将摄氏度转换为华氏度，然后写入输出流
    float tempC;
    while (inputStream >> tempC) {
        float tempF = tempC * 9.0f / 5.0f + 32.0f; // 摄氏度转换为华氏度
        outputStream << tempF << ' ';
    }

    // 从输出缓冲区读取转换后的数据并打印
    std::string outputString(outputCharSpan.data());
    std::istringstream outputDataStream(outputString);
    std::cout << "转换后的温度 (华氏度):" << std::endl;
    float tempF;
    while (outputDataStream >> tempF) {
        std::cout << tempF << " °F ";
    }
    std::cout << std::endl;

    return 0;
}